{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# spaCyチュートリアル\n",
    "#### 02 spaCy中級"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## モデルを読み込む"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import spacy\n",
    "import pandas as pd"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# nlpオブジェクトを作成\n",
    "nlp = spacy.load(\"ja_ginza\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 単語ベクトル  \n",
    "spaCyの英語モデルには小サイズを除いてGloVe（Word2Vecに似たアルゴリズム）で学習された単語ベクトルが付属されています。spaCyの単語ベクトルは他の学習済みモデルやGensim、FastTextやTensorFlowなどで一から学習した自作モデルに置き換える事も可能です。  \n",
    "\n",
    "下記の例では単語や文同士の類似度を計算しています。単語や文のベクトル表現は文章分類などの下流タスクの特徴量としても使え、お好みの機械学習フレームワークに組み込むこともできます。  \n",
    "\n",
    "GiNZAに付属されている単語ベクトルの次元数は100次元です。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[-0.42628956 -0.25070515  0.56632304 -0.04601398 -0.5660679  -1.8086241\n",
      " -1.0238795   1.0143362   0.47763383 -0.26343933  1.5452907   1.0010606\n",
      "  0.828702    1.0120491  -1.5566534  -0.53350675  0.08443125  1.9355137\n",
      " -0.00412369  0.613177    0.6531602   1.4621313  -0.41238445  0.5383796\n",
      "  1.7463263   1.2742922   0.6872132   0.95741665  0.48112172  1.3087916\n",
      " -0.05922482 -1.0843756  -2.6484137  -0.30362067 -0.5912086   1.1504346\n",
      "  1.8826097   0.77959156  1.2613478  -0.03555335 -1.2421137  -0.07365129\n",
      "  0.6298954   0.65817195  1.3989674   1.3825057  -2.0864732  -0.8521881\n",
      "  1.8979715  -0.57006633 -1.027578   -0.59627306  1.6408412  -0.6937744\n",
      " -0.80343324  0.57692754 -0.84792084 -0.3337947   1.0805885  -0.504921\n",
      " -0.31374794  0.6693753  -0.75144905  0.89448977 -1.3114382  -0.640819\n",
      " -0.47732472  0.36794803 -1.2829485   1.681444    0.32638294 -1.4287771\n",
      "  0.9807352   0.35011157 -1.7619439   0.2487583  -1.767415    0.8563484\n",
      "  1.4821373  -0.6031163   0.45007294  1.124629   -1.7681456   1.0548041\n",
      "  1.9232712  -2.5337305   0.28266302  0.3728701   0.48251173 -1.3682325\n",
      "  0.15343753 -0.6639035   1.1027089  -2.7844813  -1.2915589   0.9757886\n",
      " -1.2523669   1.3754021   0.7047121   1.1516271 ] 次元数: 100\n"
     ]
    }
   ],
   "source": [
    "# 猫の単語ベクトルと次元数をプリントする\n",
    "単語1 = nlp(\"猫\")\n",
    "print(f\"{単語1.vector} 次元数: {len(単語1.vector)}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.7506026693586216\n"
     ]
    }
   ],
   "source": [
    "# 猫とネコのコサイン類似度\n",
    "単語2 = nlp(\"ネコ\")\n",
    "print(単語1.similarity(単語2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.819816560369018\n"
     ]
    }
   ],
   "source": [
    "# 文章全体のベクトルを平均することで2つの文章のコサイン類似度を計算する\n",
    "文章1 = nlp(\"お寿司が大好きです。\")\n",
    "文章2 = nlp(\"好きな食べ物はラーメンです。\")\n",
    "print(文章1.similarity(文章2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.07853908097411089\n"
     ]
    }
   ],
   "source": [
    "# 関係のない文章の類似度は低い\n",
    "文章1 = nlp(\"お寿司が大好きです。\")\n",
    "文章2 = nlp(\"Jupyter Notebookのインストレーションガイド\")\n",
    "print(文章1.similarity(文章2))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 大規模データ処理   \n",
    "このデータは[github.com/sinjorjob/django-transformer](https://github.com/sinjorjob/django-transformer)からダウンロードしました。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "# !wget https://github.com/sinjorjob/django-transformer/raw/master/data/train.tsv -P data\n",
    "# !wget https://github.com/sinjorjob/django-transformer/raw/master/data/test.tsv -P data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "# !bzip2 data/train.tsv\n",
    "# !bzip2 data/test.tsv"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1000, 2)"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "行列 = pd.read_csv('data/train.tsv.bz2', sep='\\t', compression='bz2', names=['テキスト', 'ラベル'])\n",
    "行列 = 行列.sample(1000, random_state=1111)\n",
    "行列.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>テキスト</th>\n",
       "      <th>ラベル</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1396</th>\n",
       "      <td>アルコール測定器の販売は好調に推移いたしました</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>603</th>\n",
       "      <td>当連結会計年度におけるわが国経済は、英国のEU離脱問題や米国の新大統領の誕生、また朝鮮半島情...</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>85</th>\n",
       "      <td>事業の種類別では、設備工事業の受注高は1,342億94百万円（前期比4.5%減）、売上高は1...</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1300</th>\n",
       "      <td>一方利益面では、営業利益が196億円、経常利益が197億56百万円、親会社株主に帰属する当期...</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1928</th>\n",
       "      <td>①  「銀行・証券業務」におきましては、収益面では、有価証券利息配当金は増加したものの貸出金...</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>863</th>\n",
       "      <td>石炭部門につきましては、主力納入先である電力会社向け販売数量の増加により堅調に進みましたが、石油</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1143</th>\n",
       "      <td>当セグメントの売上高は205億12百万円となり、前連結会計年度に比べ36百万円の増収となりました</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1056</th>\n",
       "      <td>利益につきましては、増収を達成するなかで製造コストの効率化及び販売コストの効果的な運用に努め...</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1804</th>\n",
       "      <td>一方、高圧分野におきましても、新たな需要家の獲得を進め、電力販売量を大きく拡大させました</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1121</th>\n",
       "      <td>当期の売上高は、精密化学品事業部門が販売数量の増加と価格修正効果により増収となったため、46...</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                                   テキスト  ラベル\n",
       "1396                            アルコール測定器の販売は好調に推移いたしました    1\n",
       "603   当連結会計年度におけるわが国経済は、英国のEU離脱問題や米国の新大統領の誕生、また朝鮮半島情...    0\n",
       "85    事業の種類別では、設備工事業の受注高は1,342億94百万円（前期比4.5%減）、売上高は1...    0\n",
       "1300  一方利益面では、営業利益が196億円、経常利益が197億56百万円、親会社株主に帰属する当期...    1\n",
       "1928  ①  「銀行・証券業務」におきましては、収益面では、有価証券利息配当金は増加したものの貸出金...    1\n",
       "863    石炭部門につきましては、主力納入先である電力会社向け販売数量の増加により堅調に進みましたが、石油    1\n",
       "1143   当セグメントの売上高は205億12百万円となり、前連結会計年度に比べ36百万円の増収となりました    1\n",
       "1056  利益につきましては、増収を達成するなかで製造コストの効率化及び販売コストの効果的な運用に努め...    1\n",
       "1804       一方、高圧分野におきましても、新たな需要家の獲得を進め、電力販売量を大きく拡大させました    1\n",
       "1121  当期の売上高は、精密化学品事業部門が販売数量の増加と価格修正効果により増収となったため、46...    1"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "行列.head(10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 典型的なやり方 (低速)\n",
    "シングルスレッド"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "def トークン化(テキスト:str=None):\n",
    "    文章 = nlp(テキスト)\n",
    "    トークンリスト = []\n",
    "    \n",
    "    for トークン in 文章:\n",
    "        トークンリスト.append(トークン.text)\n",
    "        \n",
    "    return トークンリスト"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "23.4 s ± 56.1 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n"
     ]
    }
   ],
   "source": [
    "%%timeit\n",
    "行列['トークンリスト1'] = 行列.apply(lambda x: トークン化(x.テキスト), axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>テキスト</th>\n",
       "      <th>ラベル</th>\n",
       "      <th>トークンリスト1</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1396</th>\n",
       "      <td>アルコール測定器の販売は好調に推移いたしました</td>\n",
       "      <td>1</td>\n",
       "      <td>[アルコール, 測定, 器, の, 販売, は, 好調, に, 推移, いたし, まし, た]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>603</th>\n",
       "      <td>当連結会計年度におけるわが国経済は、英国のEU離脱問題や米国の新大統領の誕生、また朝鮮半島情...</td>\n",
       "      <td>0</td>\n",
       "      <td>[当, 連結, 会計年度, に, おけ, る, わが, 国, 経済, は, 、, 英国, の...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>85</th>\n",
       "      <td>事業の種類別では、設備工事業の受注高は1,342億94百万円（前期比4.5%減）、売上高は1...</td>\n",
       "      <td>0</td>\n",
       "      <td>[事業, の, 種類, 別, で, は, 、, 設備, 工事, 業, の, 受注, 高, は...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1300</th>\n",
       "      <td>一方利益面では、営業利益が196億円、経常利益が197億56百万円、親会社株主に帰属する当期...</td>\n",
       "      <td>1</td>\n",
       "      <td>[一方, 利益, 面, で, は, 、, 営業, 利益, が, 196億, 円, 、, 経常...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1928</th>\n",
       "      <td>①  「銀行・証券業務」におきましては、収益面では、有価証券利息配当金は増加したものの貸出金...</td>\n",
       "      <td>1</td>\n",
       "      <td>[①,  , 「, 銀行, ・, 証券, 業務, 」, に, おき, まし, ては, 、, ...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>863</th>\n",
       "      <td>石炭部門につきましては、主力納入先である電力会社向け販売数量の増加により堅調に進みましたが、石油</td>\n",
       "      <td>1</td>\n",
       "      <td>[石炭, 部門, に, つき, まし, ては, 、, 主力, 納入先, で, ある, 電力,...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1143</th>\n",
       "      <td>当セグメントの売上高は205億12百万円となり、前連結会計年度に比べ36百万円の増収となりました</td>\n",
       "      <td>1</td>\n",
       "      <td>[当, セグメント, の, 売上高, は, 205億12百万, 円, と, なり, 、, 前...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1056</th>\n",
       "      <td>利益につきましては、増収を達成するなかで製造コストの効率化及び販売コストの効果的な運用に努め...</td>\n",
       "      <td>1</td>\n",
       "      <td>[利益, に, つき, まし, ては, 、, 増収, を, 達成, する, なか, で, 製...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1804</th>\n",
       "      <td>一方、高圧分野におきましても、新たな需要家の獲得を進め、電力販売量を大きく拡大させました</td>\n",
       "      <td>1</td>\n",
       "      <td>[一方, 、, 高圧, 分野, に, おき, まし, て, も, 、, 新た, な, 需要,...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1121</th>\n",
       "      <td>当期の売上高は、精密化学品事業部門が販売数量の増加と価格修正効果により増収となったため、46...</td>\n",
       "      <td>1</td>\n",
       "      <td>[当期, の, 売上高, は, 、, 精密, 化学品, 事業, 部門, が, 販売, 数量,...</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                                   テキスト  ラベル  \\\n",
       "1396                            アルコール測定器の販売は好調に推移いたしました    1   \n",
       "603   当連結会計年度におけるわが国経済は、英国のEU離脱問題や米国の新大統領の誕生、また朝鮮半島情...    0   \n",
       "85    事業の種類別では、設備工事業の受注高は1,342億94百万円（前期比4.5%減）、売上高は1...    0   \n",
       "1300  一方利益面では、営業利益が196億円、経常利益が197億56百万円、親会社株主に帰属する当期...    1   \n",
       "1928  ①  「銀行・証券業務」におきましては、収益面では、有価証券利息配当金は増加したものの貸出金...    1   \n",
       "863    石炭部門につきましては、主力納入先である電力会社向け販売数量の増加により堅調に進みましたが、石油    1   \n",
       "1143   当セグメントの売上高は205億12百万円となり、前連結会計年度に比べ36百万円の増収となりました    1   \n",
       "1056  利益につきましては、増収を達成するなかで製造コストの効率化及び販売コストの効果的な運用に努め...    1   \n",
       "1804       一方、高圧分野におきましても、新たな需要家の獲得を進め、電力販売量を大きく拡大させました    1   \n",
       "1121  当期の売上高は、精密化学品事業部門が販売数量の増加と価格修正効果により増収となったため、46...    1   \n",
       "\n",
       "                                               トークンリスト1  \n",
       "1396    [アルコール, 測定, 器, の, 販売, は, 好調, に, 推移, いたし, まし, た]  \n",
       "603   [当, 連結, 会計年度, に, おけ, る, わが, 国, 経済, は, 、, 英国, の...  \n",
       "85    [事業, の, 種類, 別, で, は, 、, 設備, 工事, 業, の, 受注, 高, は...  \n",
       "1300  [一方, 利益, 面, で, は, 、, 営業, 利益, が, 196億, 円, 、, 経常...  \n",
       "1928  [①,  , 「, 銀行, ・, 証券, 業務, 」, に, おき, まし, ては, 、, ...  \n",
       "863   [石炭, 部門, に, つき, まし, ては, 、, 主力, 納入先, で, ある, 電力,...  \n",
       "1143  [当, セグメント, の, 売上高, は, 205億12百万, 円, と, なり, 、, 前...  \n",
       "1056  [利益, に, つき, まし, ては, 、, 増収, を, 達成, する, なか, で, 製...  \n",
       "1804  [一方, 、, 高圧, 分野, に, おき, まし, て, も, 、, 新た, な, 需要,...  \n",
       "1121  [当期, の, 売上高, は, 、, 精密, 化学品, 事業, 部門, が, 販売, 数量,...  "
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "行列.head(10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### spaCy独自のやり方 (高速)  \n",
    "spaCyはpipeメソッドを使うことでテキストを並列処理してDocオブジェクトを返します。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "19.1 s ± 84.9 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n"
     ]
    }
   ],
   "source": [
    "%%timeit\n",
    "トークンリスト = []\n",
    "\n",
    "for 文章 in nlp.pipe(行列.テキスト.astype('unicode').values, batch_size=100, n_threads=40):\n",
    "    単語リスト = []\n",
    "    for トークン in 文章:\n",
    "        単語リスト.append(トークン.text)\n",
    "        \n",
    "    トークンリスト.append(単語リスト)\n",
    "\n",
    "行列['トークンリスト2'] = トークンリスト"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### spaCy独自のやり方 (超高速)  \n",
    "`nlp`オブジェクトが作られる際にspaCyはパイプラインを追加します。不要なコンポーネントを無効にすることでspaCyの処理を更に高速化できます。パイプラインはカスタマイズ可能です。  \n",
    "\n",
    "以下の図は英語版です。GiNZAではnerの後にJapaneseCorrectorで形態素解析誤り（トークン分割、品詞）の補修をしています。また、taggerが別のコンポーネントに組み込まれているようです。\n",
    "\n",
    "![nlp_pipeline](img/nlp_pipeline.png)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "('parser', <spacy.pipeline.pipes.DependencyParser object at 0x7efb8dc67588>)\n",
      "('ner', <spacy.pipeline.pipes.EntityRecognizer object at 0x7efb8dc67528>)\n",
      "('JapaneseCorrector', <ginza.japanese_corrector.JapaneseCorrector object at 0x7efb8dd3b160>)\n"
     ]
    }
   ],
   "source": [
    "# パイプラインのコンポーネントをプリントする\n",
    "for コンポーネント in nlp.pipeline:\n",
    "    print(コンポーネント)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "13.2 s ± 22.8 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n"
     ]
    }
   ],
   "source": [
    "%%timeit\n",
    "トークンリスト = []\n",
    "\n",
    "# トークン化しか必要でない為、不要なコンポーネントは無効にする \n",
    "# nlp.make_docメソッドでも同様の処理が可能です。\n",
    "with nlp.disable_pipes('parser', 'ner', 'JapaneseCorrector'):\n",
    "    for 文章 in nlp.pipe(行列.テキスト.astype('unicode').values, batch_size=100, n_threads=40):\n",
    "        単語リスト = []\n",
    "        for トークン in 文章:\n",
    "            単語リスト.append(トークン.text)\n",
    "\n",
    "        トークンリスト.append(単語リスト)\n",
    "\n",
    "行列['トークンリスト3'] = トークンリスト"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "ただGiNZA特有の問題で、JapaneseCorrectorがトークン分割の補修をすることがあるため、トークン化の精度は落ちます。そのため、`ner`だけ無効にすることで精度を犠牲にせず高速化できます。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "行列['トークン分割補修あり'] = 行列.apply(lambda x: 0 if x.トークンリスト1 == x.トークンリスト3 else 1, axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0    989\n",
       "1     11\n",
       "Name: トークン分割補修あり, dtype: int64"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# トークン分割の補修が11個の文章でされている\n",
    "行列.トークン分割補修あり.value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>トークンリスト1</th>\n",
       "      <th>トークンリスト3</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1377</th>\n",
       "      <td>[ＨＤＤ, 用, サスペンション, は, 、, 既存, 製品, の, 需要, が, 回復, ...</td>\n",
       "      <td>[ＨＤＤ, 用, サスペンション, は, 、, 既存, 製, 品, の, 需要, が, 回復...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1051</th>\n",
       "      <td>[粉体, 調味料, 群, に, おい, て, は, 、, 小売, 用, 製品, で, は, ...</td>\n",
       "      <td>[粉体, 調味料, 群, に, おい, て, は, 、, 小売, 用, 製, 品, で, は...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>163</th>\n",
       "      <td>[重, 包装, 袋, セグメント, の, 主力, 製品, で, ある, クラフト, 紙袋, ...</td>\n",
       "      <td>[重, 包装, 袋, セグメント, の, 主力, 製, 品, で, ある, クラフト, 紙袋...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1302</th>\n",
       "      <td>[工業製品, に, つい, て, は, 、, ふっ素, 樹脂, 製品, 、, 環境, 製, ...</td>\n",
       "      <td>[工業製品, に, つい, て, は, 、, ふっ素, 樹脂, 製, 品, 、, 環境, 製...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1817</th>\n",
       "      <td>[畜産, 品, は, 、, スーパーマーケット, や, 飲食店, 向け, 加工, 製品, の...</td>\n",
       "      <td>[畜産, 品, は, 、, スーパーマーケット, や, 飲食店, 向け, 加工, 製, 品,...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1047</th>\n",
       "      <td>[液体, 調味料, 群, に, おい, て, は, 、, 小売, 用, 製品, で, は, ...</td>\n",
       "      <td>[液体, 調味料, 群, に, おい, て, は, 、, 小売, 用, 製, 品, で, は...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>661</th>\n",
       "      <td>[損益, 面, で, は, 、, 生産, 効率, の, 向上, 、, 高, 付加価値, 製品...</td>\n",
       "      <td>[損益, 面, で, は, 、, 生産, 効率, の, 向上, 、, 高, 付加価値, 製品...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1303</th>\n",
       "      <td>[高機能, 製品, に, つい, て, は, 、, 半導体, ・, 液晶, 製造, 装置, ...</td>\n",
       "      <td>[高機能, 製, 品, に, つい, て, は, 、, 半導体, ・, 液晶, 製造, 装置...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1395</th>\n",
       "      <td>[各種, 設備, 工事, 等, の, 需要, 回復, に, 伴い, 、, 当社, の, 主力...</td>\n",
       "      <td>[各種, 設備, 工事, 等, の, 需要, 回復, に, 伴い, 、, 当社, の, 主力...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>354</th>\n",
       "      <td>[これ, ら, の, 新製品, に, 加え, 、, 当社, の, 注力, 分野, で, ある...</td>\n",
       "      <td>[これ, ら, の, 新製品, に, 加え, 、, 当社, の, 注力, 分野, で, ある...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1229</th>\n",
       "      <td>[道路, 用, 塗料, に, おい, て, は, 、, 補修, 関連, 製品, と, 視覚,...</td>\n",
       "      <td>[道路, 用, 塗料, に, おい, て, は, 、, 補修, 関連, 製, 品, と, 視...</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                               トークンリスト1  \\\n",
       "1377  [ＨＤＤ, 用, サスペンション, は, 、, 既存, 製品, の, 需要, が, 回復, ...   \n",
       "1051  [粉体, 調味料, 群, に, おい, て, は, 、, 小売, 用, 製品, で, は, ...   \n",
       "163   [重, 包装, 袋, セグメント, の, 主力, 製品, で, ある, クラフト, 紙袋, ...   \n",
       "1302  [工業製品, に, つい, て, は, 、, ふっ素, 樹脂, 製品, 、, 環境, 製, ...   \n",
       "1817  [畜産, 品, は, 、, スーパーマーケット, や, 飲食店, 向け, 加工, 製品, の...   \n",
       "1047  [液体, 調味料, 群, に, おい, て, は, 、, 小売, 用, 製品, で, は, ...   \n",
       "661   [損益, 面, で, は, 、, 生産, 効率, の, 向上, 、, 高, 付加価値, 製品...   \n",
       "1303  [高機能, 製品, に, つい, て, は, 、, 半導体, ・, 液晶, 製造, 装置, ...   \n",
       "1395  [各種, 設備, 工事, 等, の, 需要, 回復, に, 伴い, 、, 当社, の, 主力...   \n",
       "354   [これ, ら, の, 新製品, に, 加え, 、, 当社, の, 注力, 分野, で, ある...   \n",
       "1229  [道路, 用, 塗料, に, おい, て, は, 、, 補修, 関連, 製品, と, 視覚,...   \n",
       "\n",
       "                                               トークンリスト3  \n",
       "1377  [ＨＤＤ, 用, サスペンション, は, 、, 既存, 製, 品, の, 需要, が, 回復...  \n",
       "1051  [粉体, 調味料, 群, に, おい, て, は, 、, 小売, 用, 製, 品, で, は...  \n",
       "163   [重, 包装, 袋, セグメント, の, 主力, 製, 品, で, ある, クラフト, 紙袋...  \n",
       "1302  [工業製品, に, つい, て, は, 、, ふっ素, 樹脂, 製, 品, 、, 環境, 製...  \n",
       "1817  [畜産, 品, は, 、, スーパーマーケット, や, 飲食店, 向け, 加工, 製, 品,...  \n",
       "1047  [液体, 調味料, 群, に, おい, て, は, 、, 小売, 用, 製, 品, で, は...  \n",
       "661   [損益, 面, で, は, 、, 生産, 効率, の, 向上, 、, 高, 付加価値, 製品...  \n",
       "1303  [高機能, 製, 品, に, つい, て, は, 、, 半導体, ・, 液晶, 製造, 装置...  \n",
       "1395  [各種, 設備, 工事, 等, の, 需要, 回復, に, 伴い, 、, 当社, の, 主力...  \n",
       "354   [これ, ら, の, 新製品, に, 加え, 、, 当社, の, 注力, 分野, で, ある...  \n",
       "1229  [道路, 用, 塗料, に, おい, て, は, 、, 補修, 関連, 製, 品, と, 視...  "
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 補修後（左）と補修前（右）\n",
    "行列[行列.トークン分割補修あり == 1][['トークンリスト1', 'トークンリスト3']]"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
